<?php
session_start();
require "include/dbms.inc.php";
require "include/template.inc.php";
require "include/setcontents.inc.php";
require "include/tags/htmlhelper.inc.php";
require "include/formcontrol.inc.php";


function send_confirm($to, $from, $id){
	//invio la mail di conferma
	$msg ="Email: {$_POST['email']}\nPassword: {$_POST['password']}\n"."Conferma la registrazione entro 24h cliccando sul seguente link: http://{$_SERVER['SERVER_NAME']}/registrazione.php?id={$id}";
	return(mail($to, "Conferma la registrazione", $msg, "From: ".$from));
}

if (!isset($_POST['page'])) {
    $_POST['page'] = 0;//form non compilato
}

if (!isset($_GET['id'])){//il ramo if contiene il codice per la compilazione del form, quello else per la conferma della registrazione
    switch ($_POST['page']) {

           case '0':
               $message="Inserire i dati richiesti nel form";
               $style="message";
               $body = new Template("dtml/form.html");
               formcontrol::precform($body,"registrazione");
               break;

           case '1'://form compilato

            if(formcontrol::field($body,$message,$style)){//la funzione effettua dei controlli sui dati inseriti nel form e stampa il messaggio $message con lo stile $style. In $body restituisce il form precompilato

                $message="Controllare i dati inseriti. Premere \"invia\" per confermare, altrimenti \"modifica\"";
                $style="message";
                $body = new Template("dtml/RiepilogoDatiReg.html");
                formcontrol::precform($body,"riepilogo");
            }
            break;

           case '2'://invia o modifica
            $body = new Template("dtml/form.html");
            if ($_POST['action']=="invia"){//richiesta di inserimento

                list($giorno,$mese,$anno)=explode('/', $_POST['data_di_nascita']);
                $data=$anno.$mese.$giorno;

                $nome = addslashes($_POST['nome']);
                $cognome = addslashes($_POST['cognome']);
                $indirizzo = addslashes($_POST['indirizzo']);
                $citta = addslashes($_POST['citta']);

                $oid = mysql_query("INSERT INTO utente VALUES (
                                    '{$nome}',
                                    '{$cognome}',
                                    '{$data}',
                                    '{$_POST['sesso']}',
                                    '{$_POST['cod_fisc']}',
                                    '{$_POST['rec_tel']}',
                                    '{$indirizzo}',
                                    '{$citta}',
                                    '{$_POST['cap']}',
                                    '{$_POST['provincia']}',
                                    '{$_POST['email']}',
                                    MD5('{$_POST['password']}'))");



                list($usec, $sec) = explode(' ', microtime()); //inserisco nelle variabili $usec e $sec rispettivamente microsecondi e secondi
                mt_srand((float) $sec + ((float) $usec * 100000));//genero il seed sul quale generare il numero randomico (stessa libreria c)
                $confirm_id=MD5(uniqid(mt_rand(), true)); //genero id e codifico in md5. il parametro true dovrebbe permettere alla funzione di generare un numero tramite un fattore entropico (disordine) più elevato
                $time=time();

                $oid2= mysql_query("INSERT INTO reg_conf VALUES ('{$_POST['email']}','{$confirm_id}','{$time}')");

                if (!($oid && $oid2)) {
                    $message="Si e' riscontrato un problema nell'inserimento";
                    $style="alert";
                    formcontrol::precform($body,"registrazione");
                } else {

                    $oid=send_confirm($_POST['email'],"D&D",$confirm_id);
                    if (!$oid){
                        $message="Si e' riscontrato un problema nell'invio dell'email di conferma";
                        $style="alert";
                        mysql_query("DELETE FROM reg_conf WHERE reg_conf.confirm='{$confirm_id}'");
                        mysql_query("DELETE FROM utente WHERE utente.email='{$_POST['email']}'");
                        formcontrol::precform($body,"riepilogo");
                    }else{
                        $message="Controllare l'email corrispondente all'indirizzo inserito per completare la registrazione";
                        $style="message";
                        unset ($body);
                    }

                    
                }

            }else{//richiesta di modifica, viene ricaricato il form precompilato

                $message="Apportare le modifiche desiderate e premete \"invia\"";
                $style="message";
                formcontrol::precform($body,"registrazione");
            }
            break;
    }
    
}else{//richiesta di conferma registrazione tramite link presente nell'email
    
    $oid=mysql_query("SELECT utente.email, reg_conf.data FROM
                      utente 
                      LEFT JOIN
                      reg_conf
                      ON utente.email = reg_conf.email_utente
                      WHERE reg_conf.confirm='{$_GET['id']}'");                                       

    $result=mysql_fetch_assoc($oid);
        
    if (mysql_num_rows($oid)!=0 AND (time()-$result['data'])<86400){//secondi in 24h
        $oid1=mysql_query("INSERT INTO privilegi values ('{$result['email']}','3')");
        $oid2=mysql_query("DELETE FROM reg_conf WHERE reg_conf.confirm='{$_GET['id']}'");
        if (!($oid1 && $oid2)) {
            $message="Si e' riscontrato un problema nell'inserimento, contattare l'amministratore del sito";
            $style="alert";
            $body=null;
        }else{
            $message="Registrazione effettuata con successo!";
            $style="message";
            $body=null;
        }
    }else{//conferma effettuata fuori tempo o tentativo di conferma invalido
            $message="Conferma registrazione effettuata fuori tempo o tentativo non valido.";
            $style="alert";
            $body=null;    }
}

setcontents::setTemplate();
setcontents::setMenu($message,$style);
setcontents::setBody($body);

$main->close();
?>
